Payment Channel
コインをブロックチェーン上に固定し、固定した金額を上限として、トラストレスにオフチェーンで決済を繰り返すためのプロトコル
→マルチシグに送金する最初のトランザクションを作る前に、払い戻しが可能なトランザクションに両者が署名する
→オフチェーン決済を複数回実行している途中で古いトランザクションをブロードキャストできないようにする
チャネルセットアップの流れ(アリスとボブ二人の場合)
①チャネル決済に使用するコインをブロックチェーン上にロックするFunding Txを作成する(まだ未署名なのでブロードキャストできない)
②それぞれ秘密の値とそのハッシュを生成し、このうちハッシュだけを相手に伝える
③相手から受け取ったハッシュを使ってFunding TxのアウトプットをインプットにしたCommitment Txをそれぞれ作り、自分の署名を付与して相手に送る
お互い相手が作成し相手の署名が付与されたCommitment Txを持っている状態になる。このTxに自分の署名を加えればTxは完成する。
このTxがブロードキャストされると、ブロードキャストしたユーザは1,000ブロック待てばコインを入手でき、相手はすぐにコインを入手できる。
④最初のCommitment Txの交換が終わったら①で作成したFunding Txに署名してネットワークにブロードキャストしてチャネルをオープンする
※Commitment Txを作成する際にFundingTxをUTXOとして参照するため、TXIDが変更可能であったSegwit前はできたが、信頼なしには危険だった
オフチェーンの決済
新しいシークレットの作成・交換し、決済の結果で残高を更新したCommitment Txを作り自分の署名を加え相手に送る
*チャネルのセットアップのときと違うのは前のCommitment Txを作る際に生成した秘密の値を相手に明らかにする点
【不正を働いた場合のペナルティ】
自分の残高が多い古いCommitment Txをブロードキャストすると1,000ブロック待たなければならないため、秘密の値を用いて不正を働いたユーザの資金も一緒に抜き出すことができるため、不正を行おうとしたユーザは全額資金を失うことになる
*ただし、古いCommitment Txがブロードキャストされていないかチェーンの監視が必要
チャネルのクローズ(2パターン)
①最新のCommitment Txをブロードキャストする。この場合、ブロードキャストした側はコインを入手できるようになるまで1,000ブロック待たなくてはならない
②協力して最新の残高で各ユーザのアドレスに各ユーザのアドレスにコインを送るclosing Txを作成し、ブロードキャストする。
HTLCs
HTLCsは誰も信頼することなく第三者を経由した決済を行う仕組み
①キャロルは最初に秘密の値とそのハッシュを生成し、そのうちハッシュをアリスに送る
②アリスはキャロルに送る自分の1BTCをボブに送るHTLC Txを作成し、ボブは自分の1BTCをキャロルに送るHTLC Txを作成してブロードキャストする
③キャロルはボブがブロードキャストしたHTLC Txをインプットにし、Secret Cと自分の署名でボブのコインを入手するTxを作成しブロードキャストする
④ボブはキャロルがブロードキャストしたTxからSecret Cがわかるので、これを使ってアリスのHTLC Txのコインを入手する
【利点】
・相手を信用することなく自分の資金を管理するため、タイムロックとペナルティの仕組みをプロトコルに採用
・第三者を経由した支払いもHTLCsで参加者を信用することなく決済が可能
・オフチェーンのTxは基本的にブロックチェーンに書かれることなく、高速決済が可能
【課題】
・チャネルのライフタイム→オンラインである必要、チャネルの開閉が増えると手数料負担が増える
・取引相手の悪意ある行動を監視→相手の不正を確かめ資金を取り戻す行動を取らなければならない